package AlgoritmosGeneticos.model.impl.cruces;

import java.util.LinkedList;
import java.util.List;

import utils.CustomRandom;
import AlgoritmosGeneticos.model.Individuo;
import AlgoritmosGeneticos.model.OperadorCruce;
import AlgoritmosGeneticos.model.impl.IndividuoImpl;

public class CruceAnular implements OperadorCruce{
	
	public CruceAnular(){
		super();
		System.out.println("Cruce anular");
	}

	@Override
	public List<Individuo> cruzar(Individuo i1, Individuo i2) {
		int randInicio = CustomRandom.getInstance().getRandomInt(i1.length());
		int randLong = CustomRandom.getInstance().getRandomInt((i1.length()/2)-1)+1;
		
	//	System.out.println("inicio: " + randInicio);
	//	System.out.println("longitud: " + randLong);
		
		char[] ind1 = i1.getNumenoBinario().toCharArray();
		char[] ind2 = i2.getNumenoBinario().toCharArray();
		char[] hijo1 = i1.getNumenoBinario().toCharArray();;
		char[] hijo2 = i2.getNumenoBinario().toCharArray();;
		
		int j=randInicio;
		for(int i=0; i<randLong; i++){
			if(j == i1.length()){
				j = 0;
			}
			hijo1[j] = ind2[j];
			hijo2[j] = ind1[j];
			j++;
		}
		
		List<Individuo> resp = new LinkedList<Individuo>();
		resp.add(new IndividuoImpl(new String(hijo1), i1.getpMut()));
		resp.add(new IndividuoImpl(new String(hijo2), i2.getpMut()));
		
		return resp;
	}

}
